﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using LarDosIdosos.Business;
using LarDosIdosos.Business.Model;
using LarDosIdosos.Properties;

namespace LarDosIdosos.DataSources
{
    public class DataSourceIdoso
    {
        public List<Idoso> BuscaIdosos(int maximumRows, int startRowIndex, string sortExpression, string sql)
        {
            DBIdosos buscaIdosos = new DBIdosos(Settings.Default.StringDeConexaoComBanco);
            List<Idoso> listaDeIdosos = buscaIdosos.SelectIdosos(sql);
            return listaDeIdosos;
        }

        public int TotalDeIdosos(string sql)
        {
            DBIdosos buscaIdosos = new DBIdosos(Settings.Default.StringDeConexaoComBanco);
            return buscaIdosos.Count(sql);
        }

        public Idoso BuscaIdoso(int Codigo_Idoso)
        {
            DBIdosos buscaIdosos = new DBIdosos(Settings.Default.StringDeConexaoComBanco);
            string sql = "select * from idoso where Codigo_Idoso = " + Codigo_Idoso;
            try
            {
                return buscaIdosos.SelectIdoso(sql);
            }
            catch (Exception ex)
            {
                throw new Exception("Não foi possível selecionar o idoso.", ex);
            }
        }

        public int UpdateIdoso(Idoso idoso)
        {
            DBIdosos salvaIdosos = new DBIdosos(Settings.Default.StringDeConexaoComBanco);
            string sql =
                string.Format(
                    "update {0} set Nome_Idoso = \"{1}\", CPF_Idoso = \"{2}\", RG_Idoso = \"{3}\", Data_de_Nascimento = \"{4}\", Sexo_Codigo_Sexo = {5}, Estado_Civil_Codigo_Estado_Civil = {6}, Nacionalidade_Idoso = \"{7}\", Naturalidade_Idoso = \"{8}\", Grau_de_Instrucao_Idoso = \"{9}\", Nome_do_Pai_Idoso = \"{10}\", Nome_da_Mae_Idoso = \"{11}\", Relatorio_De_Encaminhamento = \"{12}\", Foto_Idoso = \"{13}\" where Codigo_Idoso = {14}",
                    "idoso", idoso.Nome_Idoso, idoso.CPF_Idoso, idoso.RG_Idoso, idoso.Data_de_Nascimento.ToString("yyyy/MM/dd"),
                    idoso.Sexo_Idoso.Codigo_Sexo, idoso.Estado_Civil.Codigo_Estado_Civil, idoso.Nacionalidade_Idoso, idoso.Naturalidade_Idoso, idoso.Grau_de_Instrucao_Idoso, idoso.Nome_do_Pai_Idoso, idoso.Nome_da_Mae_Idoso, idoso.Relatorio_De_Encaminhamento, idoso.Foto_Idoso, idoso.Codigo_Idoso);
            return salvaIdosos.UpdateIdoso(sql);
        }

        public int InsertIdoso(Idoso idoso)
        {
            DBIdosos salvaIdosos = new DBIdosos(Settings.Default.StringDeConexaoComBanco);
            string sql =
                string.Format("insert into idoso (Sexo_Codigo_Sexo, Nome_Idoso, Data_de_Nascimento, CPF_Idoso, RG_Idoso, Relatorio_de_Encaminhamento, Funcionario_Codigo_Funcionario, Estado_Civil_Codigo_Estado_Civil, Nacionalidade_Idoso, Naturalidade_Idoso, Grau_de_Instrucao_Idoso, Nome_do_Pai_Idoso, Nome_da_Mae_Idoso, Foto_Idoso) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}')", idoso.Sexo_Idoso.Codigo_Sexo, idoso.Nome_Idoso, idoso.Data_de_Nascimento.ToString("yyyy-MM-dd"), idoso.CPF_Idoso, idoso.RG_Idoso, idoso.Relatorio_De_Encaminhamento, idoso.Funcionario.Codigo_Funcionario, idoso.Estado_Civil.Codigo_Estado_Civil, idoso.Nacionalidade_Idoso, idoso.Naturalidade_Idoso, idoso.Grau_de_Instrucao_Idoso, idoso.Nome_do_Pai_Idoso, idoso.Nome_da_Mae_Idoso, idoso.Foto_Idoso);
            return salvaIdosos.InsertIdoso(sql);
        }

        public void DeleteIdoso(int codigoIdoso)
        {
            DBIdosos dbIdosos = new DBIdosos(Settings.Default.StringDeConexaoComBanco);
            string sql = string.Format("delete from idoso where Codigo_Idoso = {0}", codigoIdoso);
            dbIdosos.DeleteIdoso(sql);
        }

        public int BuscaCodigoDoIdosoPeloCPF(string cpfIdoso)
        {
            return BuscaIdosoPeloCPF(cpfIdoso).Codigo_Idoso;
        }

        public void InsertResponsavelDoIdoso(int idDoIdoso, int codigoResponsavel, string GrauDeParentesco)
        {
            DBIdosos dbIdosos = new DBIdosos(Settings.Default.StringDeConexaoComBanco);
            string sql =
                string.Format("insert into responsavel_has_idoso (Responsavel_Codigo_Responsavel, Idoso_Codigo_Idoso, Grau_De_Parentesco_Responsavel_Com_Idoso) VALUES ('{0}','{1}','{2}')",codigoResponsavel, idDoIdoso, GrauDeParentesco);
            dbIdosos.InsertResponsavelHasIdoso(sql);
        }

        public void DeleteResponsaveisDoIdoso(int idDoIdoso)
        {
            DBIdosos dbIdosos = new DBIdosos(Settings.Default.StringDeConexaoComBanco);
            string sql =
                string.Format("delete from responsavel_has_idoso where Idoso_Codigo_Idoso = {0}", idDoIdoso);
            dbIdosos.DeleteIdoso(sql);
        }

        public Idoso BuscaIdosoPeloCPF(string cpfIdoso)
        {
            DBIdosos buscaIdosos = new DBIdosos(Settings.Default.StringDeConexaoComBanco);
            string sql = "select * from idoso where CPF_Idoso = \"" + cpfIdoso + "\"";
            try
            {
                return buscaIdosos.SelectIdoso(sql);
            }
            catch (Exception ex)
            {
                throw new Exception("Não foi possível selecionar o idoso.", ex);
            }
        }
    }
}